// 导入 http 模块
import http from 'wechat-http'
const app = getApp()
/**
 * 配置接口基础路径
 */
http.baseURL = 'https://live-api.itheima.net'
/**
 * 配置响应拦截器
 */
/**
 * 配置响应拦截器
 */
http.intercept.request = (params) => {
  // 读取全局实例中的 token
  const { token } = getApp()
  // 指定一个公共的头信息
  // 初始为空对象后续可以扩展
  const defaultHeader = {}
  // 追加 token 头信息
  if (token) defaultHeader.Authorization = token
  // 合并自定义头信息和公共头信息
  params.header = Object.assign(defaultHeader, params.header)
  // 处理后的请求参数
  return params
}
/**
 * 配置响应拦截器
 */
http.intercept.response = async ({ statusCode, data, config }) => {
  // statusCode 为状态码
  if (statusCode === 401) {
    // config 是调用接口的参数
    // refreshToken 过期的情形
    if (config.url.includes('/refreshToken')) {
      // 读取当前历史栈
      const pageStack = getCurrentPages()
      // 取出当前页面路径，登录成功能跳转到该页面
      const lastPage = pageStack[pageStack.length - 1]
      // 取出当前页面路径，登录成功能跳转到该页面
      const redirectURL = lastPage.route

      // 引导用户到登录页面
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}`,
      })
    }
      // 如果本地没有 refresh_token 没有必要刷新 token
      if (!app.refresh_token) return
    // 获取全局应用实例
    const app = getApp()
    // 使用 refreshToken 更新 token
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        // 这时要注意使用的是 refresh_token
        Authorization: app.refresh_token,
      },
    })
    // 更新 token 和 refresh_token
    app.setToken(res.data.token, res.data.refreshToken)
  }
  // 重新发起请求
  return http(
    Object.assign(config, {
      // 传递新的 token
      header: {
        Authorization: app.token,
      },
    })
  )
  // 过滤接口返回的数据
  return data
}



/**
 * 挂载方法到全局
 */
wx.http = http
/**
 * 模块导出
 */
export default http